import httpx
import re
import json
import os
import pandas as pd
from time import time
import openai
from langchain import OpenAI
openai.api_base = "https://api.chatanywhere.com.cn/v1"
from langchain.chat_models import ChatOpenAI
# 配置访问gpt的key，花钱买
os.environ["OPENAI_API_KEY"] = "sk-efMVlpOpSO2nV3if6mOI5rzLSxX6dhlVVUBZ2o6E3hvC5aHX"

# 提问大模型的方法
def ask_glm(json_data):
    timeout = httpx.Timeout(timeout=60.0)
    # 本地启动的大模型服务
    url = "http://127.0.0.1:32782/chat/chat"
    try:
        with httpx.Client(timeout=timeout) as client:
            response = client.post(url, json=json_data)
            # print(response)
            response.raise_for_status() # 抛出HTTP错误 (如果有)
            # print("*******")
            # print(response.text)
            parsed_data = json.loads(response.text)
            # print(parsed datal'response'
            return parsed_data['response']
    except (httpx.RequestError,ValueError): 
        print("请求大模型出错")


def predict_label_glm(file_path, content_name, label_name):
    # 最大出错次数
    max_false = 1
    correct = 0
    prefix = ""
    example = ""
    df = pd.read_csv(file_path)
    total = len(df)
    coloums = df[[content_name,label_name]]
    # 新增一列
    coloums['predict'] = 'none'
    # print(coloums.head(10))
    for index, row in coloums.iterrows():
        content = row[content_name]
        label = row[label_name]
        json_data ={
            "query": content,
            "stream": False,
            "model_name": "chatglm2-6b"
        }
        time = 0
        while time < max_false:
            predict = ask_glm(json_data)
            coloums.at[index, 'predict'] = predict
            print('predict:',predict)
            if predict.strip('#') == label:
                print('预测正确')
                correct = correct + 1
                break
            else:
                print('predict:',predict,'but label :', label)
                print('预测错误')
                time = time + 1
        #end while
    # end loop
    
    accuracy = correct / total
    print('accuracy:',str(accuracy))
    coloums.to_csv('cmcc_predict_glm.csv', index=None)
    
def predict_label_gpt(file_path, content_name, label_name):
    coloums = pd.read_csv(file_path)
    # coloums = df[[content_name,label_name]]
    # 新增一列
    coloums['predict'] = 'none'
    gpt = ChatOpenAI(model_name='gpt-3.5-turbo',openai_api_key=os.getenv("OPENAI_API_KEY"),openai_api_base='https://api.chatanywhere.com.cn/v1')
    for index, row in coloums.iterrows():
        content = row[content_name]
        # label = row[label_name]
        answer = gpt.predict(content)
        coloums.at[index, 'predict'] = answer
        print(answer)
    coloums.to_csv('cmcc_predict_gpt.csv', index=None)

def test_gpt():
    openai.api_key = os.getenv("OPENAI_API_KEY")
    gpt = ChatOpenAI(model_name='gpt-3.5-turbo',openai_api_key=os.getenv("OPENAI_API_KEY"),openai_api_base='https://api.chatanywhere.com.cn/v1')
    answer = gpt.predict('你是谁')
    print(answer)
    
def test():
    content = "您好请讲哎你好你好之前我之前我那报过了这个半个月了吧那但是我那个宽带呀一直都不管用跟那边说的信号正常但是俺那本地都不管用啊您本机的宽带是吧啊就我这个手机号别的人能用不能其他用户呃现在就是说就不能用电脑都都都现在就不能用啊您看光猫有亮红灯没有没有红灯但是只有两个灯亮以前三个灯亮现在只有两个灯亮只有两个灯亮机重启没有什么没有我想结果重启过帮您看是不是那个就是呃机顶盒那个光猫坏了呀有没有到营业厅换过光猫所以说现在这个我们这个我刚才不知道我那个不是有专业人员吗就帮我看一下如果需要换没换一下吧但是时间你给我转转什么转转过去都没人接转你们转两次都没有人接宽带专席的话是吧啊转过去两次都没有人接那可能那边比较繁忙因为他们是河南省的宽带专席成接到电话比较多因为您现在这个问题的话如果需要像光猫的话要不您直接到营业厅让他直接给您会更换光猫或者我们这边帮您转宽带专席让他下发这个那个就给您当您说一下给您换一下光猫关键是现在不知道是不是怎么会不知道是不是这个原因嘛就是说咱们有专业人员去检查一下吗是不是那当时光猫有没有当时安装宽带的时候的话要不要工作人员给您说过嗯因为您现在没有没有亮没有亮红灯那不是网线的问题的所以说您当时安装的时候有没有流那个宽带师傅的电话呃刘肯定留了我想现在就想问一下都忘记了带过来他们的人肯定也换了去他们之前都是去都得收到一条打电话可能不对呀需要帮您那你肯定我们电话发给您提示后打电话了一下可以能不能把我们这个去电话给我发过来就行了好吧我打您客户经理发信息好吧号好好好好哎好还有什么问题吗啊没了没了"
    json_data = {
            "query": content,
            # "history":[
            #     {
            #         "role": "user",
            #         "content":prefix + example
            #     },
            #     {
            #         "role": "assistant",å
            #         "content": 0
            #     }
            # ],
            "stream": False,
            "model_name": "chatglm2 -6b"
        }
    label = ask_glm(json_data=json_data)
    print(label)
    
if __name__ == "__main__":
    file_path = './dataset/test_prompt_simin.csv'
    content_name = 'prompt'
    label_name = 'label_raw'
    # predict_label_glm(file_path, content_name, label_name)    
    # test_gpt()
    predict_label_gpt(file_path, content_name, label_name)
